home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-SPAR.{_A / FPUMACRO.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  2KB  |  74 lines

  1. /* fpumacro.h: FPU related macros.
  2.  *
  3.  * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  4.  * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
  5.  */
  6.  
  7. #ifndef _SPARC64_FPUMACRO_H
  8. #define _SPARC64_FPUMACRO_H
  9.  
  10. #include <asm/asi.h>
  11. #include <asm/visasm.h>
  12.  
  13. struct fpustate {
  14.     u32    regs[64];
  15. };
  16.  
  17. #define FPUSTATE (struct fpustate *)(((unsigned long)current) + AOFF_task_fpregs)
  18.  
  19. extern __inline__ unsigned long fprs_read(void)
  20. {
  21.     unsigned long retval;
  22.  
  23.     __asm__ __volatile__("rd %%fprs, %0" : "=r" (retval));
  24.  
  25.     return retval;
  26. }
  27.  
  28. extern __inline__ void fprs_write(unsigned long val)
  29. {
  30.     __asm__ __volatile__("wr %0, 0x0, %%fprs" : : "r" (val));
  31. }
  32.  
  33. extern __inline__ void fpsave(unsigned long *fpregs,
  34.                   unsigned long *fsr,
  35.                   unsigned long *gsr)
  36. {
  37.     __asm__ __volatile__ ("
  38.     wr    %%g0, %3, %%asi
  39.     rd    %%gsr, %%g1
  40.     membar    #LoadStore | #StoreStore
  41.     stx    %%fsr, [%1]
  42.     stx    %%g1, [%2]
  43.     stda    %%f0, [%0] %%asi
  44.     stda    %%f16, [%0 + 64] %%asi
  45.     stda    %%f32, [%0 + 128] %%asi
  46.     stda    %%f48, [%0 + 192] %%asi
  47.     membar    #Sync
  48. "    : /* No outputs */
  49.     : "r" (fpregs), "r" (fsr), "r" (gsr), "i" (ASI_BLK_P)
  50.     : "g1");
  51. }
  52.  
  53. extern __inline__ void fpload(unsigned long *fpregs,
  54.                   unsigned long *fsr,
  55.                   unsigned long *gsr)
  56. {
  57.     __asm__ __volatile__ ("
  58.     wr    %%g0, %3, %%asi
  59.     membar    #StoreLoad | #LoadLoad
  60.     ldda    [%0] %%asi, %%f0
  61.     ldda    [%0 + 64] %%asi, %%f16
  62.     ldda    [%0 + 128] %%asi, %%f32
  63.     ldda    [%0 + 192] %%asi, %%f48
  64.     ldx    [%1], %%fsr
  65.     ldx    [%2], %%g1
  66.     wr    %%g1, 0, %%gsr
  67.     membar    #Sync
  68. "    : /* No outputs */
  69.     : "r" (fpregs), "r" (fsr), "r" (gsr), "i" (ASI_BLK_P)
  70.     : "g1");
  71. }
  72.  
  73. #endif /* !(_SPARC64_FPUMACRO_H) */
  74.